/***********************************************************************************
 * 文件名： boostc_config.h
 * 作者： 刘言
 * 版本： 8
 * 说明：
 *      升压控制器（静态、单例），升压电路的驱动，通过电压值反馈调整PWM占空比达到升压，并
 * 恒定电压的目的。
 *      提供以下功能：
 *          升压输出；
 *          电压调节；
 *          过流保护和通知；
 *          过载通知；
 *          开路保护和通知【未实现】。
 * 修改记录：
 * 	2020/11/04: 初版。 刘言。
 *  2021/07/07: V2。支持通过 _BSTC_FULL_ADV 来决定AD值变量类型，尽量降低RAM占用。
 *          增加 _BSTC_USE_ADV_FILTER 开关。
 *          增加 BSTC_EV_OVER_LOAD 事件。
 *          支持 POLSYS_LITE。
 *  2021/07/11: V3.增加配置项“判断过载时允许的向下偏差电压”。
 *  2021/07/12：V4.增加 BSTC_EV_NO_BOOST 事件，现在支持同时发送多个事件，每个事件占据一个位，
 *          见 boostc_event_t ，注意更改判断事件的逻辑。
 *  2021/07/14: V5. BSTC_EV_OVER_LOAD BSTC_EV_NO_BOOST 事件现在可裁剪去掉。
 *  2022/06/22: V6. 引入PID算法加强电压稳定性。仅保留中断中的快速电压调整。启动时输入初始PWM。
 *  2022/07/18: V7. 获取实际电压更准确（9次中值滤波）。
 *  2022/07/21: 始终启用PID；去掉启动函数的电压参数；调整API名称；去掉多余需要设置的API。
***********************************************************************************/
#ifndef _BOOSTC_CONFIG_H_
#define _BOOSTC_CONFIG_H_

#ifdef __cplusplus
 extern "C" {
#endif 

#include "board.h"
#include "polsys.h"

// 功能开关

// 启用“未升压”事件通知
// 未升压: 目标电压过低，无需升压就能达到或者超过
// #define _BSTC_USE_NO_BOOST_EVENT

// 启用“过载”事件通知
// 过载：无法达到（目标电压-判断过载时允许的向下偏差电压）
// #define _BSTC_USE_OVER_LOAD_EVENT

// 启用“已成功启动升压”事件通知
// #define _BSTC_USE_STARTED_EVENT     

// 定义表示启用获取真实电压功能
// #define _BSTC_USE_GET_REAL_VOLTAGE

// 参数定义

#define _BSTC_MAX_OUTPUT_VOLTAGE    10000       // 允许的最大输出电压（也是默认电压）
#define _BSTC_FULL_PWM_VALUE        TIM4_CYCLE          // PWM满值
#define _BSTC_PWM_MAX_VALUE         (u8)((float)TIM4_CYCLE*0.6+0.5)          // 默认的PWM最大值，注意不是百分比
#define _BSTC_FBRH                  10          // 反馈分压电阻H
#define _BSTC_FBRL                  1           // 反馈分压电阻L，H、L的比例正确即可，值尽量小避免计算溢出
#define _BSTC_ADC_VREF              ADC_FULL_VOLTAGE    // ADC参考电压（ADC满值时的电压值）
#define _BSTC_FULL_ADV              ADC_FULL_VALUE      // ADC满值,256、512等数字可以节省代码量
#define _BSTC_OC_ALLOW_COUNT        3           // 1~255.允许检测到过流的次数，在1ms以内。依据实际检测频率设置。

#ifdef _BSTC_USE_OVER_LOAD_EVENT
#define _BSTC_OL_ALLOW_COUNT        3           // 1~255.允许检测到过载的次数
#define _BSTC_OL_ALLOW_VOLATGE      3000        // mV.过载电压，当输出电压突然低于这个值时，认为过载
#endif


// 需要使用的外部接口定义【移植需要实现的函数】

// PWM控制器初始化（BSTC初始化时被调用）,注意：初始化默认PWM为最低或者不输出。
#define _BSTC_InitPwm()            {AdvTim_Tim4Init();AdvTim_Run(M0P_ADTIM4);}

// 设置硬件PWM值的方法，每次更新PWM值时被调用，注意：设置为0时要求立即刹车
#define _BSTC_SetPwm(v)            Board_BstSetPwm(v)

// ADC初始化（BSTC初始化时被调用）
#define _BSTC_InitAdc()            Adc_Init()

// ADC开始（定时）运行（BSTC启动升压时被调用），调用后要求ADC能不断的采集并调用 BSTC_EvNewFBV 或 BSTC_EvOverCurrent
#define _BSTC_RunAdc()             Adc_StartTimingScan()

// ADC停止（定时）运行（BSTC停止升压时被调用）
#define _BSTC_StopAdc()            Adc_StopTimingScan()


#ifdef __cplusplus
}
#endif 

#endif

